#include "Vector.h"
#include <cmath>
#include "utils.h"

/**
 * @brief 向量点积
 * @param another 另一运算元
 * @return double 运算结果
 */
double Vector::operator^(const Vector &another) const {
    return this->x * another.x + this->y * another.y;
}

/**
 * @brief 向量数乘
 * @param num 数乘运算元
 * @return Vector 运算结果
 */
Vector Vector::operator*(double num) const {
    return Vector(this->x * num, this->y * num);
}

/**
 * @brief 求模长
 * @return double 模长
 */
double Vector::length() const {
    return sqrt(*this ^ *this);
}

/**
 * @brief 重载大于运算为比较模长大小
 * @param another 另一运算元
 * @return true 大于
 * @return false 小于等于
 */
bool Vector::operator>(const Vector &another) {
    return this->length() > another.length();
}

/**
 * @brief 求朝向
 * @return double 朝向角
 */
double Vector::toward() const {
    return Coord(0, 0).toward(*this);
}

/**
 * @brief 与目标方向的夹角
 * @param toward 目标方向
 * @return double 夹角
 */
double Vector::angle(double toward) {
    return utils::angleConvert(this->toward() - toward);
}

/**
 * @brief 求某个方向的分量模长
 * @param toward 目标方向
 * @return double 分量模长
 */
double Vector::componentLength(double toward) {
    return this->length() * cos(this->angle(toward));
}

